/*
 * The LevelDB-CLI Project
 * Copyright (C) 2024 JuRuoqwq<BitPasta@163.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef RUN_CMD_H
#define RUN_CMD_H

#include "tokens.h"
#include "parse_input.h"
#include "input_prompt.h"

#include <leveldb/db.h>
#include <leveldb/status.h>
#include <leveldb/options.h>

#include <vector>

class RunCmd {
public:
    RunCmd() : db_(nullptr), options_(), readOptions_(),
        writeOptions_(), parse_() {}
    ~RunCmd();
    void Run(const std::string command);
    void RunDBCommand(const std::vector<Token> tokens);
    void RunConfig(const std::vector<Token> tokens);
    void RunNativeCommand(const std::vector<Token> tokens);
    int IsValidVariable(const Token token) const;
    leveldb::Status Clear();
    leveldb::Status ShowKeyValues(const std::string prefix) const;

private:
    leveldb::DB *db_;
    leveldb::Options options_;
    leveldb::ReadOptions readOptions_;
    leveldb::WriteOptions writeOptions_;
    ParseInput parse_;
    InputPrompt prompt_;
};

#endif